home *** CD-ROM | disk | FTP | other *** search
- /**********************************************************************************
- * *
- * EQUALIZER.CPP: The main program, the core of this application *
- * *
- * Copyright (C) 2000 Andrei Grecu *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
- * *
- * If you have questions, bug reports regarding my code please contact me at: *
- * andrei.grecu@aon.at *
- * *
- * Home page: *
- * http://members.aon.at/grxpage/index.htm *
- * *
- **********************************************************************************/
-
- #include "precomp.h"
- #include "resource.h"
- #include <dsound.h>
-
- #include "misc.h"
- #include "fdt.h"
-
- extern HINSTANCE hInst;
-
- extern LPVOID AllocMemory(DWORD dwsize);
- #define FreeMemory(ptr) GlobalFree((HGLOBAL)ptr)
-
- extern DWORD REC_PERIOD;
- extern DOUBLE DYNAMIC_RANGE_SCALE;
- extern DWORD REC_FREQ;
- extern DWORD REC_BASEBUFSIZE;
- extern BYTE REC_CHANNELS;
- extern WORD NumSliders;
- extern DWORD PROGRAM_PRIORITY;
-
- extern BOOL DynamicEqualizing, BlurEQImpact;
- extern COEF DYNAMIC_TRESHOLD;
-
- extern BOOL EQThreadValid;
- extern HANDLE hEQThread;
-
-
- /*DWORD NumCaptureGUIDs = 0;
- LPGUID CaptureGUIDs = NULL;
-
- BOOL DSCEnumCallback(LPGUID lpGuid, LPCSTR lpcstrDescription, LPCSTR lpcstrModule, LPVOID lpContext);*/
-
- // Mesage handler for preferences dialog.
- LRESULT CALLBACK Preferences(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch (message)
- {
- case WM_INITDIALOG:
- {
- LPSTR str = (LPSTR) AllocMemory(1024);
- LPSTR str2 = (LPSTR) AllocMemory(1024);
-
- SetClassLong(hDlg, GCL_HICON, (long)LoadIcon(hInst, (LPCSTR)IDI_SMALL));
-
- ltoa(REC_FREQ, str, 10);
- SendDlgItemMessage(hDlg, IDC_RECFREQ, WM_SETTEXT, strlen(str), (LPARAM)str);
-
- _gcvt(log10(DYNAMIC_RANGE_SCALE * 100) * 10, 3, str);
- SendDlgItemMessage(hDlg, IDC_DYNAMIC_RANGE_SCALE, WM_SETTEXT, strlen(str), (LPARAM)str);
-
- ltoa(REC_BASEBUFSIZE / 65536, str, 10);
- SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_SETTEXT, strlen(str), (LPARAM)str);
-
- ltoa(REC_BASEBUFSIZE / 65536 * 64, str, 10);
- strcpy(str2, "(");
- strcat(str2, str);
- strcat(str2, " KB)");
- SendDlgItemMessage(hDlg, IDC_BASEBUFSIZEBYTES, WM_SETTEXT, strlen(str2), (LPARAM)str2);
-
- ltoa(NumSliders, str, 10);
- SendDlgItemMessage(hDlg, IDC_NUMSLIDERS, WM_SETTEXT, strlen(str), (LPARAM)str);
-
- //******************************************************
- HWND hWnd = GetDlgItem(hDlg, IDC_RECPERIOD);
-
- SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "256");
- SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "512");
- SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "1024");
- SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "2048");
- SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "4096");
- SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "8192");
- SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "16384");
- SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "32768");
- SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "65536");
-
- //******************************************************
-
- _gcvt(log10(DYNAMIC_TRESHOLD) * 10, 3, str);
- SendDlgItemMessage(hDlg, IDC_TRESHOLD, WM_SETTEXT, strlen(str), (LPARAM) str);
-
- if(!DynamicEqualizing) {
- SendDlgItemMessage(hDlg, IDC_DYNAMIC_EQUALIZING, BM_SETCHECK, BST_UNCHECKED, 0);
- SendDlgItemMessage(hDlg, IDC_TRESHOLD, WM_ENABLE, 0, 0);
- EnableWindow(GetDlgItem(hDlg, IDC_BLUR_EQ), 0);
- }
- else {
- SendDlgItemMessage(hDlg, IDC_DYNAMIC_EQUALIZING, BM_SETCHECK, BST_CHECKED, 0);
- }
-
- if(BlurEQImpact) {
- SendDlgItemMessage(hDlg, IDC_BLUR_EQ, BM_SETCHECK, BST_CHECKED, 0);
- }
-
- switch(REC_CHANNELS) {
- case 1:
- SendDlgItemMessage(hDlg, IDC_MONO, BM_SETCHECK, BST_CHECKED, 0);
- break;
- case 2:
- default:
- SendDlgItemMessage(hDlg, IDC_STEREO, BM_SETCHECK, BST_CHECKED, 0);
- }
-
- SendDlgItemMessage(hDlg, IDC_RECPERIOD, CB_SETCURSEL, (WPARAM)round((FLOAT)((COEF)log((COEF)REC_PERIOD / 256) / log(2))), 0);
-
- switch(PROGRAM_PRIORITY) {
- case IDLE_PRIORITY_CLASS: SendDlgItemMessage(hDlg, IDC_PRIORITY_LOW, BM_SETCHECK, BST_CHECKED, 0); break;
- case NORMAL_PRIORITY_CLASS: SendDlgItemMessage(hDlg, IDC_PRIORITY_NORMAL, BM_SETCHECK, BST_CHECKED, 0); break;
- case HIGH_PRIORITY_CLASS: SendDlgItemMessage(hDlg, IDC_PRIORITY_HIGH, BM_SETCHECK, BST_CHECKED, 0); break;
- case REALTIME_PRIORITY_CLASS: SendDlgItemMessage(hDlg, IDC_PRIORITY_REALTIME, BM_SETCHECK, BST_CHECKED, 0); break;
- }
-
- FreeMemory(str);
- FreeMemory(str2);
- }
- return TRUE;
-
- case WM_COMMAND:
- switch(LOWORD(wParam)) {
- case IDCANCEL:
- EndDialog(hDlg, 0);
- return TRUE;
- case IDOK:
- {
- if(EQThreadValid) {
- EQThreadValid = FALSE;
- // Wait for thread to terminate (EQThreadValid = TRUE)
- while(EQThreadValid != TRUE);
- EQThreadValid = FALSE;
- CloseHandle(hEQThread);
- }
-
- LPSTR str = (LPSTR) AllocMemory(1024);
-
- REC_PERIOD = round((FLOAT)pow(2, SendDlgItemMessage(hDlg, IDC_RECPERIOD, CB_GETCURSEL, 0, 0)) * 256);
- SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
- REC_BASEBUFSIZE = atol(str) * 65536;
-
- SendDlgItemMessage(hDlg, IDC_RECFREQ, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_RECFREQ, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
- REC_FREQ = atol(str);
-
- SendDlgItemMessage(hDlg, IDC_DYNAMIC_RANGE_SCALE, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_DYNAMIC_RANGE_SCALE, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
- DYNAMIC_RANGE_SCALE = pow(10, atof(str) / (FLOAT) 10) / (FLOAT) 100;
-
- SendDlgItemMessage(hDlg, IDC_NUMSLIDERS, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_NUMSLIDERS, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
- NumSliders = atoi(str);
-
- /*********************************************************************************************/
- if(SendDlgItemMessage(hDlg, IDC_MONO, BM_GETCHECK, 0, 0) == BST_CHECKED) {
- REC_CHANNELS = 1;
- }
- if(SendDlgItemMessage(hDlg, IDC_STEREO, BM_GETCHECK, 0, 0) == BST_CHECKED) {
- REC_CHANNELS = 2;
- }
-
- /*********************************************************************************************/
- if(SendDlgItemMessage(hDlg, IDC_PRIORITY_LOW, BM_GETCHECK, 0, 0) == BST_CHECKED) {
- PROGRAM_PRIORITY = IDLE_PRIORITY_CLASS;
- }
- if(SendDlgItemMessage(hDlg, IDC_PRIORITY_NORMAL, BM_GETCHECK, 0, 0) == BST_CHECKED) {
- PROGRAM_PRIORITY = NORMAL_PRIORITY_CLASS;
- }
- if(SendDlgItemMessage(hDlg, IDC_PRIORITY_HIGH, BM_GETCHECK, 0, 0) == BST_CHECKED) {
- PROGRAM_PRIORITY = HIGH_PRIORITY_CLASS;
- }
- if(SendDlgItemMessage(hDlg, IDC_PRIORITY_REALTIME, BM_GETCHECK, 0, 0) == BST_CHECKED) {
- PROGRAM_PRIORITY = REALTIME_PRIORITY_CLASS;
- }
-
- if(SendDlgItemMessage(hDlg, IDC_DYNAMIC_EQUALIZING, BM_GETCHECK, 0, 0) == BST_CHECKED) {
- DynamicEqualizing = TRUE;
- }
- else {
- DynamicEqualizing = FALSE;
- }
-
- SendDlgItemMessage(hDlg, IDC_TRESHOLD, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_TRESHOLD, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
- DYNAMIC_TRESHOLD = pow(10, atof(str) / (FLOAT) 10);
-
- if(SendDlgItemMessage(hDlg, IDC_BLUR_EQ, BM_GETCHECK, 0, 0) == BST_CHECKED) {
- BlurEQImpact = TRUE;
- }
- else {
- BlurEQImpact = FALSE;
- }
-
- FreeMemory(str);
- EndDialog(hDlg, 1);
- }
- return TRUE;
- case IDC_RESET:
- {
- LPSTR str = (LPSTR) AllocMemory(1024);
-
- ltoa(22050, str, 10);
- SendDlgItemMessage(hDlg, IDC_RECFREQ, WM_SETTEXT, strlen(str), (LPARAM)str);
-
- _gcvt(14, 3, str);
- SendDlgItemMessage(hDlg, IDC_DYNAMIC_RANGE_SCALE, WM_SETTEXT, strlen(str), (LPARAM)str);
-
- ltoa(1, str, 10);
- SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_SETTEXT, strlen(str), (LPARAM)str);
-
- ltoa(33, str, 10);
- SendDlgItemMessage(hDlg, IDC_NUMSLIDERS, WM_SETTEXT, strlen(str), (LPARAM)str);
-
- SendDlgItemMessage(hDlg, IDC_MONO, BM_SETCHECK, BST_UNCHECKED, 0);
- SendDlgItemMessage(hDlg, IDC_STEREO, BM_SETCHECK, BST_CHECKED, 0);
-
- SendDlgItemMessage(hDlg, IDC_RECPERIOD, CB_SETCURSEL, 3, 0);
-
- SendDlgItemMessage(hDlg, IDC_PRIORITY_LOW, BM_SETCHECK, BST_UNCHECKED, 0);
- SendDlgItemMessage(hDlg, IDC_PRIORITY_NORMAL, BM_SETCHECK, BST_CHECKED, 0);
- SendDlgItemMessage(hDlg, IDC_PRIORITY_HIGH, BM_SETCHECK, BST_UNCHECKED, 0);
- SendDlgItemMessage(hDlg, IDC_PRIORITY_REALTIME, BM_SETCHECK, BST_UNCHECKED, 0);
-
- _gcvt(log10(0.1) * 10, 3, str);
- SendDlgItemMessage(hDlg, IDC_TRESHOLD, WM_SETTEXT, strlen(str), (LPARAM) str);
-
- SendDlgItemMessage(hDlg, IDC_BLUR_EQ, BM_SETCHECK, BST_UNCHECKED, 0);
-
- SendDlgItemMessage(hDlg, IDC_DYNAMIC_EQUALIZING, BM_SETCHECK, BST_UNCHECKED, 0);
- SendDlgItemMessage(hDlg, IDC_TRESHOLD, WM_ENABLE, 0, 0);
- EnableWindow(GetDlgItem(hDlg, IDC_BLUR_EQ), TRUE);
-
- FreeMemory(str);
- }
-
- return TRUE;
-
- case IDC_BASEBUFSIZE:
-
- if(HIWORD(wParam) == EN_CHANGE) {
-
- LPSTR str = (LPSTR) AllocMemory(1024);
- LPSTR str2 = (LPSTR) AllocMemory(1024);
-
- SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
-
- ltoa(atol(str) * 64, str, 10);
- strcpy(str2, "(");
- strcat(str2, str);
- strcat(str2, " KB)");
- SendDlgItemMessage(hDlg, IDC_BASEBUFSIZEBYTES, WM_SETTEXT, strlen(str2), (LPARAM)str2);
-
- FreeMemory(str);
- FreeMemory(str2);
-
- }
-
- break;
-
- case IDC_DYNAMIC_EQUALIZING:
- if(SendDlgItemMessage(hDlg, IDC_DYNAMIC_EQUALIZING, BM_GETCHECK, 0, 0) == BST_CHECKED) {
- SendDlgItemMessage(hDlg, IDC_TRESHOLD, WM_ENABLE, 1, 0);
- EnableWindow(GetDlgItem(hDlg, IDC_BLUR_EQ), TRUE);
- }
- else {
- SendDlgItemMessage(hDlg, IDC_TRESHOLD, WM_ENABLE, 0, 0);
- EnableWindow(GetDlgItem(hDlg, IDC_BLUR_EQ), FALSE);
- }
- break;
-
- }
- break;
- }
-
- return FALSE;
- }
-
-